<%@page import="Controlador.UnixComand"%>
<%@page import="java.util.Hashtable"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="Controlador.ConnectionDB"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.tomcat.util.http.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload"%>
<%@page pageEncoding="UTF-8" %>
<%
    String ServerPath = "";
    String FinalMessage = "Plugin Instalado Correctamente";
    String TypeMessage = "info";
    String PluginName = "";
    String PluginClass = "";
    String PluginType = "";
    String PluginInterprete = "";
    // Parametros Necesarios para subir archivos al servidor, éstas son instancias de clases contenidas en tomcat
    ServletFileUpload SerlevtUp = new ServletFileUpload(new DiskFileItemFactory());
    List items = SerlevtUp.parseRequest(request); // se guardan en una lista, todos los request que llegan de la página install_plugins.jsp
    List<FileItem> FormFile = new ArrayList<FileItem>();//se guardarán únicamente los request que sean archivos
    //Fin de la inicialización de parámetros
    for (int i = 0; i < items.size(); i++) {// se recorre todos los request que llegan de la página install_plugins.jsp
        FileItem item = (FileItem) items.get(i);
        if (item.isFormField()) {//si es un elemento de formulario se saca el valor que trae
            if (item.getFieldName().equals("PluginName")) {
                PluginName = item.getString();
            } else if (item.getFieldName().equals("PluginClass")) {
                PluginClass = item.getString();
            } else if (item.getFieldName().equals("PluginType")) {
                PluginType = item.getString();
            } else if (item.getFieldName().equals("PluginInterprete")) {
                PluginInterprete = item.getString();
            }

        } else {
            FormFile.add(item);// si es un archivo, se agrega a la lista.
        }

    }
    if (PluginInterprete.isEmpty()) {// dado el caso que no llegue este parámetro, dado que se escogió un plugin analizador.
        PluginInterprete = "0";
    }
//Cargar ruta de instalación de SAMP
    ConnectionDB c = new ConnectionDB();
    if (c.Connect()) {
        try {
            ResultSet rs = c.getQuery("SELECT serverpath from Server;");//cargamos el serverpath
            rs.next();
            ServerPath = rs.getString(1);
            int r;
            if(PluginInterprete.equals("D")){
             r = c.getUpdate("INSERT INTO plugin (Name, Class, Type, InterpreterPlugin) VALUES ('" + PluginName + "', '" + PluginClass + "', '" + PluginType + "', '0');");   
             ResultSet result = c.getQuery("SELECT idplugin FROM plugin ORDER BY idplugin desc limit 1;");
             result.next();
             c.getUpdate("update plugin set interpreterplugin  = '"+result.getString(1) +"' where idplugin ='"+result.getString(1) +"';");
            }else{
                r = c.getUpdate("INSERT INTO plugin (Name, Class, Type, InterpreterPlugin) VALUES ('" + PluginName + "', '" + PluginClass + "', '" + PluginType + "', '" + PluginInterprete + "');");                       
            }           
            if (r > 0) {
                rs = c.getQuery("SELECT idplugin FROM plugin ORDER BY idplugin desc limit 1;");
                rs.next();
                String idPlugin = rs.getInt(1)+"";                
                File Directorio = new File(ServerPath + "/plugins/" + idPlugin);
                Directorio.mkdirs();
                for (int i = 0; i < FormFile.size(); i++) {
                    File file = new File(ServerPath + "/plugins/" + idPlugin + "/" + FormFile.get(i).getName());
                    if (!file.exists()) {
                        FormFile.get(i).write(file);
                        r = c.getUpdate("INSERT INTO jarfile (Plugin, MD5Sum, JARFile) VALUES ('" + idPlugin + "', '" + UnixComand.md5sum(ServerPath + "/plugins/" + idPlugin + "/" + FormFile.get(i).getName()) + "', '" + FormFile.get(i).getName() + "');");
                    }
                }
                c.commit(true);
            } else {
                c.commit(false);
                TypeMessage = "error";
                FinalMessage = "No se pudo ingresar la información a la base de datos";
            }
        } catch (Exception e) {
            TypeMessage = "error";
            FinalMessage = "Ha ocurrido un error: " + e.getMessage();
        }
        finally{
            c.close();
        }
    } else {
        TypeMessage = "error";
        FinalMessage = "No se pudo conectar a la base de datos";
    }
%>
<jsp:forward page="install_plugin.jsp">    
        <jsp:param name="FinalMessage" value="<%=FinalMessage%>" />  
        <jsp:param name="TypeMessage" value="<%=TypeMessage%>"/>
</jsp:forward>